﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Xml;
using System.Threading;
using System.Windows;
using System.Diagnostics;
using RiskMan.Views.Dialogs;
using System.Reflection;

namespace RiskMan.Config
{
    class Updater
    {
        private static Updater _updater;

        public static Updater Instance ( )
        {
            if ( _updater == null )
                _updater = new Updater( );
            return _updater;
        }

        private String _versionXmlAddress = @"http://rbkm.ru/userid/version.xml";

        private Version _versionNew;
        private Thread _threadRun;
        private bool _show;


        public void Run ( Version version, bool show )
        {
            _show = show;
            threadRun( version );
        }

        private void threadRun ( object version )
        {
            _versionNew = this.GetVersion( );
            if ( _versionNew != ( Version ) version )
            {
                if ( new DialogUpdateYesNo( "Доступна новая версия. Обновить?", "Внимание!" ).Result == MessageBoxResult.Yes )
                {
                    try
                    {
                        ProcessStartInfo processInfo = new ProcessStartInfo( );
                        processInfo.FileName = System.IO.Path.GetDirectoryName( Application.ResourceAssembly.Location ) + "/Updater.exe";
                        Process.Start( processInfo );
                        Environment.Exit( 1 );
                    }
                    catch ( Exception ex )
                    {
                        cfg.SetLog( "\"Updater.exe\" не найден.", GetType(), MethodBase.GetCurrentMethod());
                    }
                }
            }
            else
            {
                if (_show == true)
                    new DialogMessage( "Обновление не требуется", "Внимание" );
            }

        }

        private Version GetVersion ( )
        {
            Version result = new Version( "0.0.0.0" );

            XmlDocument xmlDoc = new XmlDocument( );
            xmlDoc.Load( _versionXmlAddress );

            XmlNodeList version = xmlDoc.GetElementsByTagName( "version" );
            XmlNodeList path = xmlDoc.GetElementsByTagName( "path" );

            if ( version.Count == 1 && path.Count == 1 )
            {
                result = new Version( version.Item( 0 ).InnerText );
            }
            else
                cfg.SetLog( "Обновление этой версии программы не возможно.\nФайл контроля версий(\"version.xml\") на сервере не найден.", GetType( ), MethodBase.GetCurrentMethod( ) );

            return result;
        }
    }
}